package 数组题目.数组变换;

import java.util.ArrayList;
import java.util.List;

//二维网格迁移
//https://leetcode.cn/problems/shift-2d-grid/description/
class 二维网格迁移 {
    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        // 转换为一维数组，再去移动
        int m = grid.length, n = grid[0].length;
        List<List<Integer>> ret = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            List<Integer> row = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                row.add(0);
            }
            ret.add(row);
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // 直接算出总长度之后，取模获得真正在一位数组的位置
                // 然后再通过计算确定在第几行第几列
                int index1 = (i * n + j + k) % (m * n);
                // 行数 = index1 / n   列数 = index1 % n
                ret.get(index1 / n).set(index1 % n, grid[i][j]);
            }
        }
        return ret;
    }

    public static void main(String[] args) {
        二维网格迁移 二维网格迁移 = new 二维网格迁移();
//        solution.shiftGrid(new int[][]{{1}, {2}, {3}, {4}, {7}, {6}, {5}}, 23);
        二维网格迁移.shiftGrid(new int[][]{{1, 2, 3, 4, 5, 6, 7}}, 23);
//        solution.shiftGrid(new int[][]{{3, 8, 1, 9}, {19, 7, 2, 5}, {4, 6, 11, 10}, {12, 0, 21, 13}}, 4);
    }
}
